Regional Ocean: Animations of Surface Fields#
# Parameters
case_name = "CROCODILE_tutorial_nwa12_MARBL"
base_case_name = None
CESM_output_dir = (
"/glade/campaign/cgd/oce/projects/CROCODILE/workshops/2025/Diagnostics/CESM_Output/"
)
start_date = "2000-01-01"
end_date = "2000-11-01"
base_start_date = ""
base_end_date = ""
lc_kwargs = {"threads_per_worker": 1}
savefigs = True
fig_output_dir = None
serial = True
subset_kwargs = {}
product = "/glade/work/ajanney/CUPiD/examples/regional_ocean/computed_notebooks//ocn/Regional_Ocean_Animations.ipynb"
# Parameters
case_name = "CROCODILE_tutorial_nwa12_MARBL"
base_case_name = "CROCODILE_tutorial_nwa12_MARBL"
CESM_output_dir = "/glade/campaign/cesm/development/cross-wg/diagnostic_framework/CESM_output_for_testing/"
start_date = "2000-01-01"
end_date = "2000-11-01"
base_start_date = ""
base_end_date = ""
ts_dir = "/glade/derecho/scratch/ajanney/archive/"
lc_kwargs = {"threads_per_worker": 1}
serial = True
savefigs = True
fig_output_dir = None
subset_kwargs = {}
product = "/glade/work/ajanney/CUPiD/examples/regional_ocean/computed_notebooks//ocn/Regional_Ocean_Report_Card.ipynb"
Output directory is: /glade/campaign/cesm/development/cross-wg/diagnostic_framework/CESM_output_for_testing//CROCODILE_tutorial_nwa12_MARBL/ocn/hist/
Open Datasets and Define Paths#
Image output directory is: /glade/derecho/scratch/ajanney/archive/CROCODILE_tutorial_nwa12_MARBL/ocn/cupid_images
## Apply time boundaries
if len(start_date) > 0 and len(end_date) > 0:
import cftime
calendar = sfc_data.time.encoding.get("calendar", "standard")
calendar_map = {
"gregorian": cftime.DatetimeProlepticGregorian,
"noleap": cftime.DatetimeNoLeap,
}
CFTime = calendar_map.get(calendar, cftime.DatetimeGregorian)
y, m, d = [int(i) for i in start_date.split("-")]
start_date_time = CFTime(y, m, d)
y, m, d = [int(i) for i in end_date.split("-")]
end_date_time = CFTime(y, m, d)
sfc_data = sfc_data.sel(time=slice(start_date_time, end_date_time))
The GIF!#
variables = ["SSH", "tos"] # "tos", "sos", "speed", "SSV", "SSU"]
dataset = sfc_data
if dataset["time"].size > 60: # only gen gifs for 60 days at a time
dataset = dataset.isel(time=slice(0, 60))
for gif_variable in variables:
field = dataset[gif_variable]
coords = utils.chooseGeoCoords(field.dims)
areacello = utils.chooseAreacello(field.dims)
anim = utils.create2DFieldAnimation(
field,
latitude=static_data[coords["latitude"]],
longitude=static_data[coords["longitude"]],
iter_dim="time",
interval=150,
save=savefigs,
save_path=image_output_dir,
)
from matplotlib import rcParams
rcParams["animation.embed_limit"] = (
200 * 1024 * 1024
) # constrains max size of HTML to be displayed in notebook
HTML(anim.to_jshtml())